@file:Suppress("unused")

package com.example.kotlin.extension

import xyz.erupt.jpa.dao.*

/**
 * 根据id查询实体
 * @param id 主键
 * @return 如果查询成功，则返回实体，否则返回null
 */
inline fun <reified MODEL : Any> EruptDao.queryEntityById(id: Any): MODEL? {
    return this.entityManager.find(MODEL::class.java, id)
}

/**
 * 使用原生sql语句完成查询操作
 * @param sql 原生sql语句
 * @return 实体的序列
 */
inline fun <reified MODEL : Any> EruptDao.nativeQuery(sql: String): Sequence<MODEL> {
    return this.entityManager.createNativeQuery(sql, MODEL::class.java)
        .resultList.asSequence()
        .map { it as MODEL }
}

/**
 * 查询所有的实体
 * @param MODEL 实体模型
 * @return 实体的序列
 */
inline fun <reified MODEL : Any> EruptDao.queryEntityList(): Sequence<MODEL> {
    return this.entityManager.createQuery("select entity from ${MODEL::class.java.name} entity")
        .resultList.asSequence()
        .map { it as MODEL }
}